package com.moter.demo01.juc.unsafecollections;

import java.util.*;

public class UnSafeList {
    public static void main(String[] args) {
//        unsafe

        //ArrayList 多线程增加值会抛出ConcurrentModificationException ，并发修改异常
//        List<String> list = new ArrayList<>();

        //LinkedList 多线程增加值会抛出ConcurrentModificationException ，并发修改异常
//        List<String> list = new LinkedList<>();



        //safe

//        通过集合工具类让非线程安全的集合变得线程安全
//        List<String> list = Collections.synchronizedList(new ArrayList<>());

        //CopyOnWriteArrayList 写入时复制，使用lock锁完成
//        public boolean add(E e) {
//            final ReentrantLock lock = this.lock;
//            lock.lock();
//            try {
//                Object[] elements = getArray();
//                int len = elements.length;
//                Object[] newElements = Arrays.copyOf(elements, len + 1);
//                newElements[len] = e;
//                setArray(newElements);
//                return true;
//            } finally {
//                lock.unlock();
//            }
//        }
//        List<String> list =new CopyOnWriteArrayList<>();

        //vector是线程安全的，因为它修改数据的方法都用synchronized修饰了。但是性能没有CopyOnWriteArrayList好，lock锁性能更高
        List<String> list =new Vector<>();
        for (int i = 0; i < 30; i++) {
            new Thread(() -> {
                list.add(UUID.randomUUID().toString().substring(0, 5));
                System.out.println(list);
            }).start();
        }


    }
}
